﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo01
{
    class Program
    {
        static void Main(string[] args)
    {
            //            一个考试管理系统，需要录入考生成绩，只能录入数字，否则会报类型转换异常。
            //请编写相关代码，
            //1、捕获FormatException异常，并打印输出“异常已处理；
            //2、捕获OverflowException异常，数值超出double范围的异常，并打印输出“异常已处理；
            //3、捕获一般异常Exception异常。
            //4、最终处理finally
            //录入成绩结束后，请输出，总学生数，总分数，平均分。

            Console.WriteLine("请输入学生数");
            int a = int.Parse(Console.ReadLine());
            float[] arr = new float[a];
            Boolean b = false;
            for (int i = 0; i < arr.Length; i++)
            {
                b = false;
                try
                {
                    Console.WriteLine("请输入第{0}个学生的成绩", (i + 1));
                    arr[i] = float.Parse(Console.ReadLine());
                }
                catch (FormatException)
                {
                    Console.WriteLine("类型转换异常");
                    Console.WriteLine("异常已处理");
                    b = true;
                }
                catch (OverflowException)
                {
                    Console.WriteLine("数值超出float范围的异常");
                    Console.WriteLine("异常已处理");
                    b = true;
                }
                catch (Exception)
                {
                    Console.WriteLine("异常已处理");
                }
                finally
                {
                    Console.WriteLine("第{0}个学生的成绩录完", (i + 1));
                    Console.WriteLine();
                }
                if (b)
                {
                    Console.WriteLine("请重新输入第{0}个学生的成绩", (i + 1));
                    arr[i] = float.Parse(Console.ReadLine());
                }
            }
            float sum = 0;
            for (int i = 0; i < arr.Length; i++)
            {
                sum += arr[i];
            }
            float age = sum / a;
            Console.WriteLine("总学生数为{0}，总分数为{1}，平均分为{2}", a, sum, age);

//            编写一个程序，用以接收用户输入的两个浮点型的数值，一个值表示用户想要存放在银行账户中的余额，
            //另一个值表示用户想要从银行账户中提取的金额。
//实现存取款功能，
//用户功能选择：1、存款，2、取款
//取款时：
//当用户想要提取的金额大于余额时，请手动抛出一个ArgumentOutOfRangeException 参数超出范围的异常，
            //异常信息可以写“取款金额大于余额，请重新输入”
//，如此以确保取款金额始终不大于当前余额。
//操作结束，打印输出余额是多少。
//最后再添加catch一般异常 Exception，使得数据类型转换的异常也能被捕获到。

 
  double  sum=0;

            while (true)
            {
                Console.WriteLine("用户功能选择：1、存款，2、取款");
                int i = int.Parse(Console.ReadLine());

                switch (i)
                {
                    case 1:
                        Console.WriteLine("请输入要存款的金额：");
                        int cun = int.Parse(Console.ReadLine());
                        sum += cun;
                        Console.WriteLine("存入成功!余额还有："+sum);

                        break;

                    case 2:
                       
                        try
                        {
                            Console.WriteLine("请输入需要取款的金额：");
                            int qu = int.Parse(Console.ReadLine());
                            if (qu > sum)
                            {
                                throw new ArgumentOutOfRangeException();
                            }
                            else
                            {
                                sum -= qu;
                                Console.WriteLine($"取出的金额为{qu},余额为{sum}");
                            }
                        }
                        catch (ArgumentOutOfRangeException)
                        {
                            Console.WriteLine("取款金额大于余额，请重新输入");

                        }
                        catch (Exception) 
                        {
                            Console.WriteLine("异常已处理！");
                        }
                        break;
                    default:
                        break;
                }
               
            }

        }
    }
}
